package system.until;

import java.math.BigDecimal;

public class DoubleUtil {
	/**  
     * 对double数据进行取精度.  
     * <p>  
     * For example: <br>  
     * double value = 100.345678; <br>  
     * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>  
     * ret为100.3457 <br>  
     *   
     * @param value  
     *            double数据.  
     * @param scale  
     *            精度位数(保留的小数位数).  
     * @param roundingMode  
     *            精度取值方式.  BigDecimal. ROUND_UP,ROUND_DOWN,ROUND_CEILING,ROUND_FLOOR
     *            ROUND_HALF_UP,ROUND_HALF_DOWN,ROUND_HALF_EVEN
     * @return 精度计算后的数据.  
     */     
   public static double round(double value, int scale, int roundingMode) {   
       BigDecimal bd = new BigDecimal(value);   
       bd = bd.setScale(scale, roundingMode);   
       double d = bd.doubleValue();   
       bd = null;  
       return d; 
   }  
   
   /**
    * 提供精确的加法运算
    * @param v1 被加数
    * @param v2 加数
    * @return 两个参数的和
    */
   public static double add(double v1,double v2){
	   BigDecimal b1 = new BigDecimal(Double.toString(v1));
	   BigDecimal b2 = new BigDecimal(Double.toString(v2));
	   return b1.add(b2).doubleValue();
   }
   
   /**
    * 提供精确的减法法运算
    * @param v1 被减数
    * @param v2 减数
    * @return 两个参数的差
    */
   public static double sub(double v1,double v2){
	   BigDecimal b1 = new BigDecimal(Double.toString(v1));
	   BigDecimal b2 = new BigDecimal(Double.toString(v2));
	   return b1.subtract(b2).doubleValue();
   }
   
   /**
    * 提供精确的乘法运算
    * @param v1 被乘数
    * @param v2 乘数
    * @return 两个参数的积
    */
   public static double mul(double v1,double v2){
	   BigDecimal b1 = new BigDecimal(Double.toString(v1));
	   BigDecimal b2 = new BigDecimal(Double.toString(v2));
	   return b1.multiply(b2).doubleValue();
   }
   
}
